package com.finanzaspersonales;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.concurrent.ExecutionException;

import json.jsonActualizar;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import clases.Objetivos;
import clases.categoria_gastos;
import clases.estimacion;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.Spinner;


public class Ver_Objetivo extends Activity {
	private ProgressBar pb;
	private ArrayList<Objetivos> objetivos = new ArrayList<Objetivos>();
	 private int posicion;
	private Button btn_agregar;
	private Button btn_eliminar;
	private Button btn_estimar;
	private Button btn_restar;
	private String idUsuario;
	private AlertDialog.Builder msg;
	private String message;

	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		idUsuario= this.getIntent().getExtras().getString("idUsuario");
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ver_objetivo);
		
		pb= (ProgressBar)findViewById(R.id.pbOF);
		
		Spinner s = (Spinner)findViewById(R.id.spinnerObj);
		
		objetivos=llenaObjetivos();
		
		final ArrayList<String> nomObjetivos = new ArrayList<String>();
		
		for(int i=0; i<objetivos.size() ;i++){
			nomObjetivos.add(objetivos.get(i).getNombreObj());
		}
		
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,
				nomObjetivos);		
		adapter.setDropDownViewResource(
	            android.R.layout.simple_spinner_dropdown_item);
	        s.setAdapter(adapter);
	        s.setOnItemSelectedListener(
	            new AdapterView.OnItemSelectedListener() {
					public void onItemSelected(AdapterView<?> parent,View view,int position,long id) {	                	
	                	String nombreObj= nomObjetivos.get(position);
	                	posicion = buscaObj(nombreObj);
	                	//valores en progress bar
	                	pb.setMax((int)objetivos.get(posicion).getMontoOF());
	                	pb.setProgress((int)objetivos.get(posicion).getMontoActual());
	                	//rubro y subrubro
	                	EditText etr = (EditText)findViewById(R.id.etrubro);
	                	etr.setText(objetivos.get(posicion).getRubro());
	                	EditText etsr = (EditText)findViewById(R.id.etSubrubro);
	                	etsr.setText(objetivos.get(posicion).getSubRubro());
	                	//dias restantes
	                	EditText etdr = (EditText)findViewById(R.id.etDiasRest);
	                	etdr.setText(String.valueOf(objetivos.get(posicion).getDias()));
	                	//meses restantes
	                	EditText etmr = (EditText)findViewById(R.id.etMesesRest);
	                	etmr.setText(String.valueOf(objetivos.get(posicion).getMeses()));
	                }
	                public void onNothingSelected(AdapterView<?> parent) {
	                }
	            }
	        );
		/*
		StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
		*/
	        
	    btn_agregar = (Button) findViewById(R.id.btnAddOF);
	    btn_agregar.setOnClickListener(new View.OnClickListener() {
			            public void onClick(View v) {
			            	EditText etMonto = (EditText)findViewById(R.id.etAddOF);
			                try {
								agregaMonto(etMonto.getText().toString(), objetivos.get(posicion).getId());
							} catch (InterruptedException e) {
								e.printStackTrace();
							} catch (ExecutionException e) {
								e.printStackTrace();
							}
			            }		            
			        });
	    btn_restar = (Button) findViewById(R.id.btnMinusOF);
	    btn_restar.setOnClickListener(new View.OnClickListener() {
			            public void onClick(View v) {
			            	EditText etMonto = (EditText)findViewById(R.id.etAddOF);
			                try {
								restarMonto(etMonto.getText().toString(), objetivos.get(posicion).getId());
							} catch (InterruptedException e) {
								e.printStackTrace();
							} catch (ExecutionException e) {
								e.printStackTrace();
							}
			            }		            
			        });
	    btn_eliminar = (Button) findViewById(R.id.btnDelOF);
	    btn_eliminar.setOnClickListener(new View.OnClickListener() {
			            public void onClick(View v) {
			            	try {
								eliminarObj(objetivos.get(posicion).getId());
							} catch (InterruptedException e) {
								e.printStackTrace();
							} catch (ExecutionException e) {
								e.printStackTrace();
							}
			            }		            
			        });
	    btn_estimar = (Button) findViewById(R.id.btnEstimar);
	    btn_estimar.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				try {
					estimarObj(objetivos.get(posicion).getId());
				} catch (InterruptedException e) {
					e.printStackTrace();
				} catch (ExecutionException e) {
					e.printStackTrace();
				}
			}
		});
	}


	protected void eliminarObj(int id) throws InterruptedException, ExecutionException {
		JSONArray  jArray = null;
		try {
			jArray = (new JSONParser_Final().execute("http://10.0.2.2:3000/objetivo_financieros/borrarOF/"+id+".json")).get();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
	}
	private void createDialog(){
		msg = new AlertDialog.Builder(this);
		msg.setTitle("Estimacion de Objetivo Financiero");
		msg.setMessage(message);
		msg.show();
	}
	protected void estimarObj(int id) throws InterruptedException, ExecutionException {
		ArrayList<estimacion> estimaciones = new ArrayList<estimacion>();
		JSONArray  jArray = null;
		try {
			jArray = (new JSONParser_Final().execute("http://10.0.2.2:3000/objetivo_financieros/estimar/"+id+".json")).get();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
		
		try {
			for(int i = 0; i < jArray.length(); i++){
				 JSONObject jsonItem = jArray.getJSONObject(i);
		         JSONObject jsonItem1 = jsonItem.getJSONObject("objetivo_financiero");
		         int mesesTranscurridos = jsonItem1.getInt("mesesTranscurridos");
		         double monto = jsonItem1.getDouble("monto");
		         double rspta = jsonItem1.getDouble("rspta");
		         int mesesTotales = jsonItem1.getInt("mesesTotales");
		         double montoOF = jsonItem1.getDouble("montoOF");
		              
		         estimacion est = new estimacion(mesesTranscurridos, monto, rspta, mesesTotales, montoOF);
		         estimaciones.add(est);
			}
		}catch (JSONException e) {
		     e.printStackTrace();
		 }
		if (estimaciones.get(0).getMontoOF() > estimaciones.get(0).getRspta()){
			message = "Si sigues asi no vas a llegar a cumplir el objetivo. Solo llegaras a ahorrar S/." + estimaciones.get(0).getRspta() ;
		}
		if (estimaciones.get(0).getMontoOF() == estimaciones.get(0).getRspta()){
			message = "Si sigues asi vas a llegar a cumplir el objetivo. Llegaras a ahorrar S/." + estimaciones.get(0).getRspta() ;
		}
		if (estimaciones.get(0).getMontoOF() < estimaciones.get(0).getRspta()){
			message = "Si sigues asi lograras cumplir tu objetivo. Incluso llegaras a ahorrar S/." + estimaciones.get(0).getRspta() ;
		}
		
		this.createDialog();
			
		return;
	}


	protected void agregaMonto(String monto, int id) throws InterruptedException, ExecutionException {
		JSONArray  jArray = null;
		try {
			jArray = (new JSONParser_Final().execute("http://10.0.2.2:3000/objetivo_financieros/actualizarMonto/"+id+"/"+monto+".json")).get();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
		int montod = Integer.parseInt(monto);
		pb.setProgress((int)objetivos.get(posicion).getMontoActual()+montod);
	}
	
	protected void restarMonto(String monto, int id) throws InterruptedException, ExecutionException {
		JSONArray  jArray = null;
		try {
			jArray = (new JSONParser_Final().execute("http://10.0.2.2:3000/objetivo_financieros/restarMonto/"+id+"/"+monto+".json")).get();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
		int montod = Integer.parseInt(monto);
		pb.setProgress((int)objetivos.get(posicion).getMontoActual()-montod);
	}


	protected int buscaObj(String nombreObj) {
		int pos = 0;
		for (int i=0; i<objetivos.size(); i++){
			if (objetivos.get(i).getNombreObj().equals(nombreObj)){
				pos=i;
				break;
			}
		}
		return pos;
	}


	private ArrayList<Objetivos> llenaObjetivos() {
		ArrayList<Objetivos> objetivos = new ArrayList<Objetivos>();
		JSONArray  jArray = null;
		try {
			jArray = (new JSONParser_Final().execute("http://10.0.2.2:3000/objetivo_financieros/verOF/"+idUsuario+".json")).get();
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		} catch (ExecutionException e) {
			
			e.printStackTrace();
		}
		
		try {
			for(int i = 0; i < jArray.length(); i++){
				 JSONObject jsonItem = jArray.getJSONObject(i);
		         JSONObject jsonItem1 = jsonItem.getJSONObject("objetivo_financiero");
		         int id = jsonItem1.getInt("id");
		         String nombreObj = jsonItem1.getString("nombre");
		         String rubro = jsonItem1.getString("nombreRubro");
		         String subRubro = jsonItem1.getString("nombreSubRubro");
		         double montoActual = jsonItem1.getDouble("montoActual");
		         double montoOF = jsonItem1.getDouble("montoOF");
		         String fecLimite = jsonItem1.getString("fecLimite");
		         int meses = jsonItem1.getInt("meses");
		         int dias = jsonItem1.getInt("dias");
		              
		         Objetivos ob = new Objetivos(id, nombreObj, rubro, subRubro, montoActual, montoOF, dias, meses, fecLimite);
		         objetivos.add(ob);
		        
			}
		}catch (JSONException e) {
		     e.printStackTrace();
		 }
		return objetivos;
	}
	
	
}
